// 读取文件
const fs = require('fs')

// 异步读取文件 先判断是否有这个文件，不然会报错
fs.stat('./sources/test.txt',(err,data)=>{    
    if(err){return false}
    fs.readFile('./sources/test.txt',(err,data)=>{
        if(err) {console.log(err); return}
        console.log(data) //返回为buffer类型
        console.log(data.toString())
    })
})

// 同步文件读取

let data = fs.readFileSync('./sources/test2.txt')
console.log(data.toString())

// 流式读取
const rs = fs.FileReadStream('./sources/girl.mp4')
// 创建写入流
const ws = fs.FileWriteStream('./sources/girl3.mp4');

//写入的第一种方式
// rs.on('data',chunk=>{
//     // ws.write(chunk)
// })
// 第二种方式，用管道
rs.pipe(ws)
console.log(process.memoryUsage()) //输出读写所用缓存大小


// 文件重命名，与移动。rename方法, 这个方法不会重新创建文件夹，所以新的文件夹必须先创建
// fs.rename('./sources/test.txt','./copy/data.txt',(err)=>{
//     if(err){
//         console.log(err)
//         return false;
//     }
//     console.log('重命名移动完成')
// })

// 删除文件， 同步方法是 unlinkSync
// fs.unlink('./sources/test4.txt',(err,data)=>{
//     if(err){
//         console.log(err)
//         return false;
//     }
//     console.log('delete success`')
// })

// 第二种删除文件的方法。 同步方法为。rmSync
// fs.rm('./copy/data.txt',(err)=>{
//     console.log('删除成功')
// })

// 创建文件夹
fs.mkdir('./a/b/c',{recursive:true},(err)=>{
    console.log('创建成功。recursive 是让命令递归创建，如果没有参数，写成./a 则会创建一个文件夹，否则报错')
})